'use strict';
/**
 * @author 张少辉
 * 创建时间： 2015-12-14 09:29:21
 * 创建任务号：无
 * 创建原因：对toastr进一步封装
 * 参考路径：https://github.com/Foxandxss/angular-toastr
 */
angular.module('nec-admin.common')
    .config(function(toastrConfig) {
        angular.extend(toastrConfig, {
            positionClass: 'toast-top-center',
            preventOpenDuplicates: true,
            maxOpened: 3,
            timeOut: 4000
        });
    })
    .factory('toast', ['toastr', '_', 'toastrConfig', function(toastr, _, toastrConfig) {
        function securitifyConfig(config) {
            if (_.isEmpty(config)) {
                config = {};
            } else {
                angular.extend(toastrConfig, config);
            }
            config.title = config.title || '';
            return config;
        }
        return {

            /**
             * toast提示消息
             * @param  {[String]} message toast消息
             * @param  {[String]} type    toast类型【success,info,error,warning】
             * @param  {[Object]} config  配置信息
             * {
             *    title: '',        toast标题
             *    allowHtml: false, 是否允许html
                  autoDismiss: false, 是否可以允许toast顶替显示
                  closeButton: false, 是否出现关闭按钮
                  closeHtml: '<button>&times;</button>', 关闭按钮html
                  containerId: 'toast-container', 容器id
                  extendedTimeOut: 1000,    鼠标移动到toast上后消失的时间
                  iconClasses: {
                    error: 'toast-error',   错误图标样式
                    info: 'toast-info',     信息图标样式
                    success: 'toast-success',   成功图标样式
                    warning: 'toast-warning'    警告图标样式
                  },
                  maxOpened: 0,             最大显示toast数，为0表示不限制
                  messageClass: 'toast-message',    消息样式
                  newestOnTop: true,        新toast是否在旧的上面（不是覆盖）
                  onHidden: null,           隐藏时回调
                  onShown: null,            显示时回调
                  onTap: null,              点击时回调
                  positionClass: 'toast-top-right',     显示位置
                            【toast-top-left,toast-top-center,toast-top-right,
                            toast-top-full-width,toast-bottom-full-width
                            toast-bottom-left,toast-bottom-center,toast-bottom-right】
                  preventDuplicates: false,             是否相同信息允许弹出多个
                  preventOpenDuplicates: false,         是否相同信息同时显示多个
                  progressBar: false,                   是否显示时间倒计时条
                  tapToDismiss: true,                   是否点击可以隐藏toast
                  target: 'body',                       显示容器
                  templates: {
                    toast: 'directives/toast/toast.html',   toast模板
                    progressbar: 'directives/progressbar/progressbar.html'  进度条模板
                  },
                  timeOut: 5000,            停留时间，为0表示不自动隐藏
                  titleClass: 'toast-title',    toast 标题样式
                  toastClass: 'toast'       toast整体样式
             * }
             * @return {[Toast|null]}  如果type正确,则返回Toast对象,用于其他操作（remove,clear）
             *                      如果type不正确,则返回null
             */
            toast: function(message, type, config) {
                type = type || 'success';
                var execFn = toastr[type];
                if (angular.isFunction(execFn)) {
                    config = securitifyConfig(config);
                    return execFn(message, config.title, config);
                } else {
                    return null;
                }
            },

            /**
             * Success Toast
             * 具体参见toast
             */
            success: function(message, config) {
                return this.toast(message, 'success', config);
            },

            /**
             * Info Toast
             * 具体参见toast
             */
            info: function(message, config) {
                return this.toast(message, 'info', config);
            },

            /**
             * Error Toast
             * 具体参见toast
             */
            error: function(message, config) {
                return this.toast(message, 'error', config);
            },

            /**
             * Warning Toast
             * 具体参见toast
             */
            warning: function(message, config) {
                return this.toast(message, 'warning', config);
            },

            /**
             * 返回当前现实toast的个数
             * @return {[Number]} 个数
             */
            active: function() {
                return toastr.active();
            },

            /**
             * 清除toast
             * @param  {[Toast]} toast 如果不指定toast,则清除当前全部显示的toast
             */
            clear: function(toast) {
                if (_.isEmpty(toast)) {
                    toastr.clear();
                } else {
                    toastr.clear(toast);
                }
            },

            /**
             * 移除toast
             * @param  {[Toast]} toast     要移除的Toast对象 
             * @param  {[Boolean]} wasClicked 是否是鼠标点击
             */
            remove: function(toast, wasClicked) {
                toastr.remove(toast.toastId, wasClicked);
            }
        };
    }]);
